<%@page import="java.util.Map"%>
<%@page import="java.util.List"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.Date"%>
<%@page import="com.yh.entity.Zhanfeng"%>
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL表达式</title>
<style type="text/css">
pre {
	font-size: 2rem;
	line-height: 2;
}
</style>
</head>
<body>
	<pre>
		1. [2]个与请求参数有关的内置对象
		request.getParameter("a") = <%=request.getParameter("a")%>
		$ {param.a} = ${param.a }
		request.getParameter("c") = <%=request.getParameter("c")%>
		$ {param.c} = ${param.c }
		request.getParameter("a.b") = <%=request.getParameter("a.b")%>
		$ {param.a.b} = $ {param.a.b }//报错，没有b的属性
		$ {param["a.b"]} = ${param["a.b"] }
		
		request.getParameterValues("b") = <%=request.getParameterValues("b")%>
		$ {paramValues.b} = ${paramValues.b }
		request.getParameterValues("b")[0] = <%=request.getParameterValues("b")[0]%>
		$ {paramValues.b[0]} = ${paramValues.b[0]}
		
		request.getParameterValues("b").length = <%=request.getParameterValues("b").length%>
		$ {paramValues.b.length} = $ {paramValues.b.length}//报错，EL表达式不能访问对象的成员变量，但是能访问方法和属性（getter）
		request.getParameter("a").length() = <%=request.getParameter("a").length()%>
		$ {param.a.length()} = ${param.a.length()}
		
		request.getParameter("c").length() = &lt;%=request.getParameter("c").length() %&gt;//报错：null异常
		$ {param.c.length()} = ${param.c.length() }
		
		request.getParameterValues("b")[10] = &lt;%=request.getParameterValues("b")[10] %&gt;//下标越界
		$ {paramValues.b[10]} = ${paramValues.b[10]}
		
		2. [4]个与属性有关的内置对象
		&lt;%
		pageContext.setAttribute("a", "aa");
		request.setAttribute("b", "bb");
		session.setAttribute("c", "cc");
		application.setAttribute("d", "dd");
		request.setAttribute("d", "ddd");
		%&gt;	<%
		pageContext.setAttribute("a", "aa");
		request.setAttribute("b", "bb");
		session.setAttribute("c", "cc");
		application.setAttribute("d", "dd");
		request.setAttribute("d", "ddd");
	%>
		$ {pageScope.a } = ${pageScope.a }
		$ {requestScope.b  } = ${requestScope.b  }
		$ {requestScope.d  } = ${requestScope.d  }
		$ {sessionScope.c  } = ${sessionScope.c  }
		$ {applicationScope.d  } = ${applicationScope.d  }
		$ {a } ${a } | $ {b } ${b } | $ {c } ${c } | $ {d } ${d } | $ {e } ${e }|
		
		3. [4]个其他对象，包括头信息、cookie值等
		$ {cookie.JSESSIONID} = ${cookie.JSESSIONID}
		$ {cookie.JSESSIONID.value} = ${cookie.JSESSIONID.value}
		$ {header["User-Agent"]} = ${header["User-Agent"]}
		$ {headerValues["User-Agent"]} = ${headerValues["User-Agent"]}
		$ {headerValues["User-Agent"][0]} = ${headerValues["User-Agent"][0]}
		$ {initParam["sys.name"]} = ${initParam["sys.name"]}
		
		4. pageContext对象
		request.getContextPath()/ = <%=request.getContextPath()%>/
		((HttpServletRequest)pageContext.getRequest()).getContextPath()/ = <%=((HttpServletRequest) pageContext.getRequest()).getContextPath()%>/
		$ {pageContext.request.contextPath}/ = ${pageContext.request.contextPath}/
		$ {pageContext.session.id } = ${pageContext.session.id }
		$ {pageContext.request.remoteAddr } = ${pageContext.request.remoteAddr }
		$ {pageContext.request.requestURL } = ${pageContext.request.requestURL }
		
		注意：不习惯的地方
		&lt;%
		Zhanfeng user = new Zhanfeng();
		user.setZfName("admin");
		Date date = new Date();//jsp中间定义的变量不能在EL表达式中直接使用
		//如果要使用，变量需要设置到某个属性中
		pageContext.setAttribute("user", user);
		pageContext.setAttribute("date", date);
		%&gt;<%
		Zhanfeng user = new Zhanfeng();
		user.setZfName("admin");
		Date date = new Date();//jsp中间定义的变量不能在EL表达式中直接使用
		//如果要使用，变量需要设置到某个属性中
		pageContext.setAttribute("user", user);
		pageContext.setAttribute("date", date);
		%>
		$ {user} = ${user }
		$ {date} = ${date }
		
		5. [5]个算术运算符
		 + - * / %
		 &lt;%
		String a3 = "abc";
		String a4 = new String(a3);
		pageContext.setAttribute("a1", 1);
		pageContext.setAttribute("a2", "123");
		pageContext.setAttribute("a3", a3);
		pageContext.setAttribute("a4", a4);
		%&gt;<%
		String a3 = "abc";
		String a4 = new String(a3);
		pageContext.setAttribute("a1", 1);
		pageContext.setAttribute("a2", "123");
		pageContext.setAttribute("a3", a3);
		pageContext.setAttribute("a4", a4);
		%>
		$ {1+1 } = ${1+1 }
		$ {a1+1 } = ${a1+1 }
		$ {a2+1 } = ${a2+1 } //算术运行会自动进行类型转换，+没有字符串连接符的功能
   		$ {a2 }$ {1 } = ${a2 }${1 }
   		$ {a3+1} = $ {a3+1}//报错：NumberFormatException
   		
   		6. [6]个比较运算符
  		> >= < <= == !=
   		gt ge lt le eq nq
		$ {2>1 } = ${2>1 }
		$ {2 gt 1 } = ${2 gt 1 }
		$ {"aa" > "ab" } = ${"aa" > "ab" }
		$ {"adc" > "ab" } = ${"adc" > "ab" } //对象的比较要实现 java.lang.Comparable<T>
		//通常对象比较只使用 == !=
    	a3==a4 = <%=a3==a4 %>
    	a3.equals(a4) = <%=a3.equals(a4) %>
    	$ {a3==a4 } = ${a3==a4 }//对象的==和！=比较采用对象的equals方法
    	
    	7. [3]个逻辑运算符
  	 	&& and
   		|| or
   		! not
   		
   		8. [3]个其他运算符
		&lt;%
		pageContext.setAttribute("b1", null);
		pageContext.setAttribute("b2", "");
		pageContext.setAttribute("b3", new String[]{});
		pageContext.setAttribute("b4", new ArrayList());
		pageContext.setAttribute("b5", new HashMap());
		%&gt;<%
		pageContext.setAttribute("b1", null);
		pageContext.setAttribute("b2", "");
		pageContext.setAttribute("b3", new String[]{});
		pageContext.setAttribute("b4", new ArrayList());
		pageContext.setAttribute("b5", new HashMap());
		%>
		empty 判断是否有该属性
   		$ {empty b1 } ${empty b1 } | $ {empty b2 } ${empty b2 } | $ {empty b3 } ${empty b3 } | $ {empty b4 } ${empty b4 } | $ {empty b5 } ${empty b5 } | $ {empty " " } ${empty " " } |$ {empty 0 } ${empty 0 } | 
   		?: $ {true?"男":"女"}  ${true?"男":"女"} $ {false?"男":"女"}  ${false?"男":"女"}
   		() 提升优先级
   		
   		9. .与[]多数情况下相同
		&lt;%
		pageContext.setAttribute("c1", new int[]{3,4,5,6});
		List<Long> c2 = new ArrayList();
		c2.add(7L);
		c2.add(8L);
		c2.add(9L);
		pageContext.setAttribute("c2", c2);
		pageContext.setAttribute("c3", "user");
		Map<String,Object> c4 = new HashMap();
		c4.put("name1", 1);
		c4.put("user", user);
		pageContext.setAttribute("c4", c4);
		%&gt;<%
		pageContext.setAttribute("c1", new int[]{3,4,5,6});
		List<Long> c2 = new ArrayList();
		c2.add(7L);
		c2.add(8L);
		c2.add(9L);
		pageContext.setAttribute("c2", c2);
		pageContext.setAttribute("c3", "user");
		Map<String,Object> c4 = new HashMap();
		c4.put("name1", 1);
		c4.put("user", user);
		pageContext.setAttribute("c4", c4);
		%>
		$ {c1[0] } = ${c1[0] }
		$ {c2[0] } = ${c2[0] }
		$ {c3} = ${c3 }
		$ {c4 } = ${c4 }
		$ {c4.name1 } = ${c4.name1 }
		$ {c4["name1"] } = ${c4["name1"] }
		$ {c4.user.zfName } = ${c4.user.zfName }
		$ {c4["user"].zfName } = ${c4["user"].zfName }
		$ {c4[c3].zfName } = ${c4[c3].zfName }
	</pre>
</body>
</html>